package ln.javatest.day15.demo01;
/*
序列化的之前：
编译器会把Person.java文件编译生成Person.class文件
Person类实现了Serializable接口，就会根据类的定义
给Person.class文件，添加一个序列号

序列化的时候：序列号也跟着在Person.txt中

反序列化的时候：
会使用Person.class文件中的序列号和Person.txt中的序列号比较
如果是一样的，则反序列化成功
如果不一样，则抛出InvalidClassException

解决方法：
    可以手动给类添加一个序列号
    无论是否对类的定义进行修改，都不重新生成新的序列号
    格式：
      在Serializable接口规定：
        可序列化类可以通过声明名为“serialVersionUID”的字段（字段必须是静态的（static）、最终（final）的long型字段）显式声明其自己的serialVersionUID
        eg:static final long serialVersionUID = 1L;(常量，不能改变）

*/
import java.io.Serializable;

public class Person implements Serializable {
    //解决方案
    private static final long serialVersionUID = 1L;
    private String name;
    //这里如果修改了类的定义，那么就会给Person.class文件重新编译生成一个新的序列号
    //这里直接运行反序列化，序列号不一样，则抛出异常
    //private int age;
    public int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }
}
